001 /* EVolve - an Extensible Software Visualization Framework
002 * Copyright (C) 2001-2002 Qin Wang
003 *
004 * This library is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU Library General Public
006 * License as published by the Free Software Foundation; either
007 * version 2 of the License, or (at your option) any later version.
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Library General Public License for more details.
013 *
014 * You should have received a copy of the GNU Library General Public
015 * License along with this library; if not, write to the
016 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017 * Boston, MA 02111-1307, USA.
018 */
019
020 /*
021 * EVolve is distributed at http://www.sable.mcgill.ca/EVolve/
022 */
023
024 package EVolve;
025
026 import EVolve.visualization.*;
027 import EVolve.util.predefinedutils.VisualizationSerializer;
028 import EVolve.util.settings.*;
029 import EVolve.util.overlappers.OverlapVisualization;
030 import EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar;
031 import EVolve.data.DataManager;
032 import java.awt.*;
033 import java.awt.Dimension;
034 import java.awt.event.*;
035 import java.util.*;
036 import java.io.*;
037 import javax.swing.*;
038 import javax.swing.event.*;
039
040 public class UIManager {
041 private JFrame frame;
042 private JDesktopPane desktop;
043 private boolean doNotRemoveWindow;
044
045 private ArrayList windowList;
046
047 private JPanel panelStatus;
048 private JLabel labelStatus;
049
050 private JMenuBar menuBar;
051
052 private JMenu menuFile;
053 private JMenuItem itemLoad;
054 private JMenuItem itemAddDataSource;
055 private JMenuItem itemExit;
056
057 private JMenu menuVisualization;
058 private JMenu menuNew;
059 private JMenuItem[] itemNew;
060 private JMenuItem itemVisualize;
061 private JMenuItem itemPredefinedVisualize;
062
063 private JMenu menuWindow;
064 private JMenuItem itemArrange;
065
066 /** added functions */
067 private JMenu menuTool;
068
069 private JMenu menuBatch;
070 private JMenuItem itemBuildBatch;
071 private JMenuItem itemRunBatch;
072
073 private JMenu menuPredefinedViz;
074 private JMenuItem itemReadSetting;
075 private JMenuItem itemSaveSetting;
076 private JMenu menuUseSetting;
077
078 private JMenu menuOverlapViz;
079 private JMenuItem itemLinkViz;
080
081 private JMenu menuSelection;
082 private JMenuItem itemCurrentSelection;
083 private JMenuItem itemAutoSelection;
084
085 private JRadioButtonMenuItem[] itemSettings;
086 private JMenuItem itemSynOverlap;
087 private JMenuItem itemAsynOverlap;
088
089 private JMenuItem itemEnablePhaseDetector;
090
091 private JMenu menuOptions;
092 private JMenuItem itemPath;
093 private JMenuItem itemInfo;
094
095 private JMenu menuHelp;
096 private JMenuItem itemAbout;
097
098 private JDialog dialog;
099 private JComboBox comboColumn;
100 private JList listVisualization;
101 private DefaultListModel model;
102
103 private JDialog dialogAbout;
104
105 private String lastConfigDir, lastDataDir, lastResultDir;
106
107 private JToolBar toolbar;
108 private EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar toolbarPhaseDetector;
109 private JButton tblVizNow, tblConfigure;
110 private JComboBox tblComboDataSource;
111
112 public UIManager() {
113 try {
114 javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLookAndFeelClassName());
115 } catch (Exception e) {}
116
117 frame = new JFrame(Scene.VERSION);
118
119 ImageIcon icon = new ImageIcon(this.getClass().getResource("img/logo_icon.gif"));
120 frame.setIconImage(icon.getImage());
121
122 frame.addWindowListener(new WindowAdapter() {
123 public void windowClosing(WindowEvent e) {
124 System.exit(0);
125 }
126 });
127
128 frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
129
130 windowList = new ArrayList();
131
132 createMenu();
133
134 createToolBar();
135 frame.getContentPane().add(toolbar, BorderLayout.NORTH);
136
137
138 desktop = new JDesktopPane();
139 desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
140 frame.getContentPane().add(desktop, BorderLayout.CENTER);
141
142 panelStatus = new JPanel(new BorderLayout());
143 panelStatus.setBackground(new Color(240, 240, 240));
144 panelStatus.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLoweredBevelBorder(), BorderFactory.createLineBorder(new Color(240, 240, 240), 2)));
145 frame.getContentPane().add(panelStatus, BorderLayout.SOUTH);
146
147 labelStatus = new JLabel(Scene.VERSION);
148 panelStatus.add(labelStatus, BorderLayout.WEST);
149
150 frame.setVisible(true);
151
152 createDialog();
153 createAbout();
154 doNotRemoveWindow = false;
155
156 lastDataDir = "";
157 lastConfigDir = "";
158 lastResultDir="";
159 }
160
161 private void createMenu() {
162 menuBar = new JMenuBar();
163 frame.setJMenuBar(menuBar);
164
165 menuFile = new JMenu("File");
166 menuFile.setMnemonic(KeyEvent.VK_F);
167 menuBar.add(menuFile);
168
169 itemLoad = new JMenuItem("Load Data...");
170 itemLoad.setMnemonic(KeyEvent.VK_L);
171 itemLoad.addActionListener(new ActionListener() {
172 public void actionPerformed(ActionEvent e) {
173 Scene.loadDataSource();
174 for (int i = 0; i<Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber(); i++) {
175 Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVizByIndex(i).setTranslated(false);
176 }
177 }
178 });
179 menuFile.add(itemLoad);
180 menuFile.addSeparator();
181
182 itemAddDataSource = new JMenuItem("Add Data Source...");
183 itemAddDataSource.setMnemonic(KeyEvent.VK_A);
184 itemAddDataSource.addActionListener(new ActionListener() {
185 public void actionPerformed(ActionEvent e) {
186 String name = JOptionPane.showInputDialog(getDesktop(),"Name of the new data source:");
187 if (name != null) {
188 Scene.getDataSourceManager().addDataSource(name);
189 updateDatasourceCombo();
190 }
191 }
192 });
193 menuFile.add(itemAddDataSource);
194 menuFile.addSeparator();
195
196 itemExit = new JMenuItem("Exit");
197 itemExit.setMnemonic(KeyEvent.VK_X);
198 itemExit.addActionListener(new ActionListener() {
199 public void actionPerformed(ActionEvent e) {
200 System.exit(0);
201 }
202 });
203 menuFile.add(itemExit);
204
205 menuVisualization = new JMenu("Visualization");
206 menuVisualization.setMnemonic(KeyEvent.VK_V);
207 menuBar.add(menuVisualization);
208
209 menuNew = new JMenu("New");
210 menuNew.setMnemonic(KeyEvent.VK_N);
211 menuVisualization.add(menuNew);
212
213 itemPredefinedVisualize = new JMenuItem("Predefined Visualize");
214 itemPredefinedVisualize.setMnemonic(KeyEvent.VK_P);
215 itemPredefinedVisualize.addActionListener(new ActionListener() {
216 public void actionPerformed(ActionEvent e) {
217 Scene.getToolsManager().getPredefinedVisualizationRunner().runPredefinedVisualization();
218 }
219 });
220 menuVisualization.add(itemPredefinedVisualize);
221
222 itemVisualize = new JMenuItem("Visualize...");
223 itemVisualize.setMnemonic(KeyEvent.VK_V);
224 itemVisualize.addActionListener(new ActionListener() {
225 public void actionPerformed(ActionEvent e) {
226 Scene.getVisualizationManager().preVisualize();
227 }
228 });
229 menuVisualization.add(itemVisualize);
230
231 menuWindow = new JMenu("Window");
232 menuWindow.setMnemonic(KeyEvent.VK_W);
233 menuBar.add(menuWindow);
234
235 itemArrange = new JMenuItem("Arrange...");
236 itemArrange.setMnemonic(KeyEvent.VK_A);
237 itemArrange.addActionListener(new ActionListener() {
238 public void actionPerformed(ActionEvent e) {
239 arrange();
240 }
241 });
242 menuWindow.add(itemArrange);
243
244 menuTool = new JMenu("Tools");
245 menuTool.setMnemonic(KeyEvent.VK_T);
246 menuBar.add(menuTool);
247
248 itemBuildBatch = new JMenuItem("Build Batch");
249 itemBuildBatch.setMnemonic(KeyEvent.VK_B);
250 itemBuildBatch.addActionListener(new ActionListener() {
251 public void actionPerformed(ActionEvent e) {
252 Scene.getToolsManager().getBatchRunner().showWindow();
253 }
254 });
255 itemRunBatch = new JMenuItem("Run Batch");
256 itemRunBatch.setMnemonic(KeyEvent.VK_R);
257 itemRunBatch.addActionListener(new ActionListener() {
258 public void actionPerformed(ActionEvent e) {
259 if (Scene.getToolsManager().getBatchRunner() != null)
260 Scene.getToolsManager().getBatchRunner().runBatch();
261 }
262 });
263 menuBatch = new JMenu("Auto Generate Visualizations");
264 menuBatch.setMnemonic(KeyEvent.VK_A);
265 menuBatch.add(itemBuildBatch);
266 menuBatch.add(itemRunBatch);
267
268 itemReadSetting = new JMenuItem("Load Predefined Viz Setting");
269 itemReadSetting.setMnemonic(KeyEvent.VK_L);
270 itemReadSetting.addActionListener(new ActionListener() {
271 public void actionPerformed(ActionEvent e) {
272 VisualizationSerializer.v().loadConfiguration();
273 }
274 });
275 itemSaveSetting = new JMenuItem("Save Current Viz Setting");
276 itemSaveSetting.setMnemonic(KeyEvent.VK_S);
277 itemSaveSetting.addActionListener(new ActionListener() {
278 public void actionPerformed(ActionEvent e) {
279 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList();
280 if (vizList.size() == 0) return;
281
282 VisualizationSerializer.v().showSavingDialog();
283 }
284 });
285 menuUseSetting = new JMenu("Choose Predefined Viz Setting");
286 menuUseSetting.setMnemonic(KeyEvent.VK_C);
287 menuPredefinedViz = new JMenu("Predefined Visualization");
288 menuPredefinedViz.setMnemonic(KeyEvent.VK_P);
289 menuPredefinedViz.add(itemReadSetting);
290 menuPredefinedViz.add(itemSaveSetting);
291 menuPredefinedViz.add(menuUseSetting);
292
293
294 itemLinkViz = new JMenuItem("Unify Visualizations...");
295 itemLinkViz.setMnemonic(KeyEvent.VK_U);
296 itemLinkViz.addActionListener(new ActionListener() {
297 public void actionPerformed(ActionEvent e) {
298 Scene.getToolsManager().getLinkedVisualizationRunner().showWindow();
299 }
300 });
301
302 itemSynOverlap = new JMenuItem("Overlap Visualizations...");
303 itemSynOverlap.setMnemonic(KeyEvent.VK_O);
304 itemSynOverlap.addActionListener(new ActionListener() {
305 public void actionPerformed(ActionEvent e) {
306 Scene.getToolsManager().getOverlapVisualizationRunner().getSynOverlapper().showWindow();
307 }
308 });
309 itemAsynOverlap = new JMenuItem("Auto Overlap Visualizations ...");
310 itemAsynOverlap.setMnemonic(KeyEvent.VK_A);
311 itemAsynOverlap.addActionListener(new ActionListener() {
312 public void actionPerformed(ActionEvent e) {
313 Scene.getToolsManager().getOverlapVisualizationRunner().getAsynOverlapper().showWindow();
314 }
315 });
316 menuOverlapViz = new JMenu("Overlap Visualizations");
317 menuOverlapViz.setMnemonic(KeyEvent.VK_O);
318 menuOverlapViz.add(itemSynOverlap);
319 menuOverlapViz.add(itemAsynOverlap);
320
321 itemEnablePhaseDetector = new JMenuItem("Enable Phase Detector");
322 itemEnablePhaseDetector.setMnemonic(KeyEvent.VK_E);
323 itemEnablePhaseDetector.addActionListener(new ActionListener() {
324 public void actionPerformed(ActionEvent e) {
325 toolbarPhaseDetector.setVisible(true);
326 refreshToolBar();
327 Scene.getVisualizationManager().enablePhaseDetector(true);
328 }
329 });
330
331
332 menuSelection = new JMenu("Selection");
333 menuSelection.setMnemonic(KeyEvent.VK_S);
334 menuSelection.addMenuListener(new MenuListener() {
335 public void menuSelected(MenuEvent e) {
336 menuSelection.removeAll();
337 createSelectionMenuItem();
338 }
339 public void menuDeselected(MenuEvent e) {
340
341 }
342 public void menuCanceled(MenuEvent e) {
343
344 }
345 });
346 menuBar.add(menuSelection);
347
348 menuTool.add(menuBatch);
349 menuTool.add(menuPredefinedViz);
350 menuTool.add(menuOverlapViz);
351 menuTool.add(itemLinkViz);
352 menuTool.add(itemEnablePhaseDetector);
353
354 menuOptions = new JMenu("Options");
355 menuOptions.setMnemonic(KeyEvent.VK_O);
356 menuBar.add(menuOptions);
357
358 itemPath = new JMenuItem("Setting Path...");
359 itemPath.setMnemonic(KeyEvent.VK_S);
360 itemPath.addActionListener(new ActionListener() {
361 public void actionPerformed(ActionEvent e) {
362 SceneSetting.v().showSettingDialog();
363 }
364 });
365
366 itemInfo = new JMenuItem("View Current Setting");
367 itemInfo.setMnemonic(KeyEvent.VK_V);
368 itemInfo.addActionListener(new ActionListener() {
369 public void actionPerformed(ActionEvent e) {
370 SceneSetting.v().showCurrentSetting();
371 }
372 });
373 menuOptions.add(itemPath);
374 menuOptions.add(itemInfo);
375
376 menuHelp = new JMenu("Help");
377 menuHelp.setMnemonic(KeyEvent.VK_H);
378 menuBar.add(menuHelp);
379
380 itemAbout = new JMenuItem("About EVolve...");
381 itemAbout.setMnemonic(KeyEvent.VK_A);
382 itemAbout.addActionListener(new ActionListener() {
383 public void actionPerformed(ActionEvent e) {
384 showDialog(dialogAbout, 300, 150);
385 }
386 });
387 menuHelp.add(itemAbout);
388 }
389
390 private void createToolBar() {
391 toolbar = new JToolBar();
392 toolbar.setPreferredSize(new java.awt.Dimension(frame.getWidth(),31));
393 FlowLayout layout = new FlowLayout(FlowLayout.LEFT,2,0);
394 layout.layoutContainer(toolbar);
395 toolbar.setLayout(layout);
396 toolbar.setFloatable(false);
397 toolbar.setRollover(true);
398 toolbar.setBackground(new Color(207,207,207));
399
400 tblComboDataSource = new JComboBox();
401 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList();
402 for (int i=0; i<dmList.size(); i++) {
403 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName());
404 }
405 tblComboDataSource.addActionListener(new ActionListener() {
406 public void actionPerformed(ActionEvent e) {
407 DataSourceManager dsm = Scene.getDataSourceManager();
408 dsm.switchDataSource(tblComboDataSource.getSelectedIndex());
409 if (Scene.getDataManager().isDataLoaded() == false) {
410 disableFunctionMenus();
411 } else {
412 enableMenu();
413 }
414 }
415 });
416
417 tblConfigure = new JButton(new ImageIcon(Scene.getGifURL("config.gif")));
418 tblConfigure.setToolTipText("Configure Current Visualization");
419 tblConfigure.addActionListener(new ActionListener() {
420 public void actionPerformed(ActionEvent e) {
421 Visualization visual = Scene.getVisualizationManager().getActiveVisualization();
422 if (visual != null) visual.configure();
423 }
424 });
425 tblConfigure.setPreferredSize(new java.awt.Dimension(28,28));
426
427 tblVizNow = new JButton(new ImageIcon(Scene.getGifURL("vizNow.gif")));
428 tblVizNow.setToolTipText("Visualize Current Visualization Now");
429 tblVizNow.addActionListener(new ActionListener() {
430 public void actionPerformed(ActionEvent e) {
431 Scene.getVisualizationManager().visualizeNow();
432 }
433 });
434 tblVizNow.setPreferredSize(new java.awt.Dimension(28,28));
435
436 toolbarPhaseDetector = new EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBar();
437 toolbarPhaseDetector.setVisible(false);
438
439 toolbar.add(new JLabel("Data Source: "));
440 toolbar.add(tblComboDataSource);
441 toolbar.add(tblConfigure);
442 toolbar.add(tblVizNow);
443 toolbar.add(toolbarPhaseDetector);
444
445 toolbar.addContainerListener(new ContainerAdapter() {
446 public void componentAdded(ContainerEvent e) {
447 refreshToolBar();
448 }
449
450 public void componentRemoved(ContainerEvent e) {
451 refreshToolBar();
452 }
453 });
454 }
455
456 private void createDialog() {
457 dialog = new JDialog(frame, "Select Windows", true);
458 model = new DefaultListModel();
459 listVisualization = new JList(model);
460 listVisualization.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
461
462 JPanel panelColumn = new JPanel(new FlowLayout());
463 dialog.getContentPane().add(panelColumn, BorderLayout.NORTH);
464
465 panelColumn.add(new JLabel("Number of column: "));
466
467 comboColumn = new JComboBox();
468 comboColumn.addItem(" 1 ");
469 comboColumn.addItem(" 2 ");
470 comboColumn.addItem(" 3 ");
471 comboColumn.addItem(" 4 ");
472 panelColumn.add(comboColumn);
473
474 JScrollPane scrollPane = new JScrollPane(listVisualization);
475 scrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Choose windows"));
476 dialog.getContentPane().add(scrollPane, BorderLayout.CENTER);
477
478 JPanel panelButton = new JPanel(new FlowLayout());
479 dialog.getContentPane().add(panelButton, BorderLayout.SOUTH);
480
481 JButton buttonApply = new JButton("Apply");
482 buttonApply.addActionListener(new ActionListener() {
483 public void actionPerformed(ActionEvent e) {
484 dialogApply();
485 }
486 });
487 panelButton.add(buttonApply);
488
489 JButton buttonCancel = new JButton("Cancel");
490 buttonCancel.addActionListener(new ActionListener() {
491 public void actionPerformed(ActionEvent e) {
492 dialogCancel();
493 }
494 });
495 panelButton.add(buttonCancel);
496 }
497
498 public void createAbout() {
499 dialogAbout = new JDialog(frame, "About EVolve", true);
500 dialogAbout.getContentPane().setBackground(new Color(240, 240, 240));
501 dialogAbout.getContentPane().add(new JLabel(new ImageIcon(this.getClass().getResource("img/logo_about.gif"))), BorderLayout.CENTER);
502 }
503
504 public void init() {
505 if (doNotRemoveWindow) return;
506 /*windowList.clear();
507 JInternalFrame[] frame = desktop.getAllFrames();
508 for (int i = 0; i < frame.length; i++) {
509 frame[i].dispose();
510 }*/
511 ArrayList vizList = Scene.getVisualizationManager().getVisualizationList();
512 ArrayList newWindowList = new ArrayList();
513 int datasourceId = Scene.getDataSourceManager().getCurrentDataSourceId();
514 for (int i=0; i<vizList.size(); i++) {
515 Visualization visual = (Visualization)vizList.get(i);
516 EVolve.Window window = visual.getWindow();
517 if (visual.getDataSourceId() == datasourceId)
518 window.dispose();
519 else
520 newWindowList.add(window);
521 }
522 windowList = newWindowList;
523
524 disableFunctionMenus();
525 menuWindow.setEnabled(false);
526 }
527
528 public JFrame getFrame() {
529 return frame;
530 }
531
532 public void setStatus(String status) {
533 labelStatus.setText(status);
534 }
535
536 public void enableMenu() {
537 menuNew.removeAll();
538 String[] name = Scene.getVisualizationManager().getFactoryName();
539 itemNew = new JMenuItem[name.length];
540 for (int i = 0; i < itemNew.length; i++) {
541 itemNew[i] = new JMenuItem(((char)(i + 65)) + " - " + name[i]);
542 itemNew[i].setMnemonic(i + 65);
543 itemNew[i].addActionListener(new ActionListener() {
544 public void actionPerformed(ActionEvent e) {
545 Scene.getVisualizationManager().newVisualization(((JMenuItem)(e.getSource())).getText().substring(4));
546 menuSelection.removeAll();
547 createSelectionMenuItem();
548 }
549 });
550 menuNew.add(itemNew[i]);
551 }
552
553 menuVisualization.setEnabled(true);
554 menuWindow.setEnabled(true);
555 menuSelection.setEnabled(true);
556
557 //tblVizNow.setEnabled(true);
558 //tblConfigure.setEnabled(true);
559 updateToolbarButtons();
560 }
561
562 public void enableFileMenus() {
563 menuFile.setEnabled(true);
564 menuSelection.setEnabled(true);
565 menuTool.setEnabled(true);
566 }
567
568 public void showDialog(JDialog dialog, int width, int height) {
569 dialog.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width - width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - height) / 2, width, height);
570 dialog.setVisible(true);
571 }
572
573 public void addVisualization(Visualization visualization) {
574 Window newWindow = new Window(visualization);
575 newWindow.setBounds(0, 0, desktop.getSize().width, desktop.getSize().height);
576 newWindow.setVisible(true);
577
578 desktop.add(newWindow);
579 newWindow.addInternalFrameListener(new InternalFrameAdapter() {
580 public void internalFrameActivated(InternalFrameEvent e) {
581 refreshToolBar();
582 }
583
584 public void internalFrameClosed(InternalFrameEvent e) {
585 refreshToolBar();
586 }
587
588 public void internalFrameOpened(InternalFrameEvent e) {
589 refreshToolBar();
590 }
591 });
592 try {
593 newWindow.setSelected(true);
594 } catch (Exception e) {};
595
596 windowList.add(newWindow);
597
598 visualization.setWindow(newWindow);
599 updateToolbarButtons();
600 refreshToolBar();
601 }
602
603 public Window addOverlappedVisualization(OverlapVisualization visual) {
604 Window newWindow = new Window(visual);
605 newWindow.setBounds(0, 0, desktop.getSize().width/2, desktop.getSize().height/2);
606 newWindow.setVisible(true);
607
608 desktop.add(newWindow);
609 try {
610 newWindow.setSelected(true);
611 } catch (Exception e) {};
612
613 windowList.add(newWindow);
614 return newWindow;
615 }
616
617 public void removeWindow(Window window) {
618 window.dispose();
619 Scene.getVisualizationManager().removeVisualization(window.getVisualization());
620 windowList.remove(window);
621 updateToolbarButtons();
622 }
623
624 private void arrange() {
625 int selectedCounter = 0;
626 for (int i = 0; i < windowList.size(); i++) {
627 if (!((Window)(windowList.get(i))).isIcon()) {
628 selectedCounter++;
629 }
630 }
631
632 int[] selected = new int[selectedCounter];
633 selectedCounter = 0;
634
635 model.removeAllElements();
636
637 for (int i = 0; i < windowList.size(); i++) {
638 model.addElement(((Window)(windowList.get(i))).getTitle());
639 if (!((Window)(windowList.get(i))).isIcon()) {
640 selected[selectedCounter] = i;
641 selectedCounter++;
642 }
643 }
644
645 listVisualization.setSelectedIndices(selected);
646
647 showDialog(dialog, 270, 360);
648 }
649
650 private void dialogApply() {
651 dialog.setVisible(false);
652
653 for (int i = 0; i < windowList.size(); i++) {
654 try {
655 ((Window)(windowList.get(i))).setIcon(true);
656 } catch (Exception e) {}
657 }
658
659 int[] selected = listVisualization.getSelectedIndices();
660
661 if (selected.length != 0) {
662 boolean[] located = new boolean[selected.length];
663 for (int i = 0; i < located.length; i++) {
664 located[i] = false;
665 }
666
667 int columnNumber = comboColumn.getSelectedIndex() + 1;
668 int width = desktop.getWidth() / columnNumber;
669 int height = desktop.getHeight() / ((selected.length - 1) / columnNumber + 1);
670
671 for (int i = 0; i < selected.length; i++) {
672 int x = (i % columnNumber) * width;
673 int y = (i / columnNumber) * height;
674
675 int minDistance = Integer.MAX_VALUE;
676 int minIndex = -1;
677
678 for (int j = 0; j < selected.length; j++) {
679 if (!located[j]) {
680 int distance = (((Window)(windowList.get(selected[j]))).getX() - x) * (((Window)(windowList.get(selected[j]))).getX() - x) + (((Window)(windowList.get(selected[j]))).getY() - y) * (((Window)(windowList.get(selected[j]))).getY() - y);
681 if (distance < minDistance) {
682 minDistance = distance;
683 minIndex = j;
684 }
685 }
686 }
687
688 try {
689 ((Window)(windowList.get(selected[minIndex]))).setIcon(false);
690 ((Window)(windowList.get(selected[minIndex]))).setBounds(x, y, width, height);
691 located[minIndex] = true;
692 } catch (Exception e) {}
693 }
694 }
695 }
696
697 private void dialogCancel() {
698 dialog.setVisible(false);
699 }
700
701 public void refreshMenu(String filename,String configureName) {
702 int selIndex = 0;
703 if (Scene.getToolsManager().getPredefinedVisualizationRunner().containsConfigure(configureName)) {
704 Scene.showErrorMessage("Visualization configuration for this name already exists!");
705 return;
706 }
707
708 Scene.getToolsManager().getPredefinedVisualizationRunner().addPredefinedVisualization(filename,configureName);
709 menuUseSetting.removeAll();
710 itemSettings = new JRadioButtonMenuItem[Scene.getToolsManager().getPredefinedVisualizationRunner().getPredefinedVisualizationNumber()];
711 for (int i = 0; i < itemSettings.length; i++) {
712 String addConfigureName = Scene.getToolsManager().getPredefinedVisualizationRunner().getConfigureName(i);
713 if (addConfigureName.equals(configureName)) {
714 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(i);
715 selIndex = i;
716 }
717 itemSettings[i] = new JRadioButtonMenuItem(addConfigureName);
718 itemSettings[i].addActionListener(new ActionListener() {
719 public void actionPerformed(ActionEvent e) {
720 for (int i=0; i<itemSettings.length; i++) {
721 if (itemSettings[i].isSelected()) itemSettings[i].setSelected(false);
722 }
723 int selected = Scene.getToolsManager().getPredefinedVisualizationRunner().getIdFromName(
724 ((JRadioButtonMenuItem)(e.getSource())).getText());
725 Scene.getToolsManager().getPredefinedVisualizationRunner().setSelected(selected);
726 itemSettings[selected].setSelected(true);
727 }
728 });
729 menuUseSetting.add(itemSettings[i]);
730 }
731 itemSettings[selIndex].setSelected(true);
732 }
733
734 public void clearWindowsList() {
735 windowList.clear();
736 }
737
738 public void setDoNotRemoveWindow(boolean newValue) {
739 doNotRemoveWindow = newValue;
740 }
741
742 public JDesktopPane getDesktop() {
743 return desktop;
744 }
745
746 public String getLastDataDir() {
747 return lastDataDir;
748 }
749
750 public void setLastDataDir(String dir) {
751 lastDataDir = dir;
752 }
753
754 public String getLastConfigDir() {
755 return lastConfigDir;
756 }
757
758 public void setLastConfigDir(String dir) {
759 lastConfigDir = dir;
760 }
761
762 public String getLastResultDir() {
763 return lastResultDir;
764 }
765
766 public void setLastResultDir(String dir) {
767 lastResultDir = dir;
768 }
769
770 public void disableFunctionMenus() {
771 menuVisualization.setEnabled(false);
772 menuSelection.setEnabled(false);
773 tblVizNow.setEnabled(false);
774 tblConfigure.setEnabled(false);
775 }
776
777 public void disableFileMenus() {
778 menuFile.setEnabled(false);
779 menuSelection.setEnabled(false);
780 menuTool.setEnabled(false);
781 }
782
783 public void loadSelection() {
784 RandomAccessFile selectionFile;
785 JFileChooser fc = new JFileChooser(getLastConfigDir());
786 String filename = null;
787
788 if(fc.showOpenDialog(frame) != JFileChooser.APPROVE_OPTION) return;
789
790 try {
791 filename = fc.getSelectedFile().getPath();
792 setLastConfigDir(filename);
793 selectionFile = new RandomAccessFile(filename, "r");
794
795 //String version = selectionFile.readLine().trim();
796 //if (!version.equals(Scene.VERSION)) throw (new IOException());
797 //selectionName = selectionFile.readLine().trim();
798
799 Scene.getFilter().loadSelection(selectionFile);
800
801 } catch (Exception e) {
802 Scene.showErrorMessage("Invalid selection file format.");
803 return;
804 }
805 }
806
807 private void createSelectionMenuItem() {
808 Visualization visual = Scene.getVisualizationManager().getActiveVisualization();
809 JMenuItem[] tempMenus = null;
810
811 if (visual!=null) tempMenus = visual.createSelectionMenuItem();
812
813 if (tempMenus != null) {
814 for (int i=0; i<tempMenus.length; i++)
815 menuSelection.add(tempMenus[i]);
816 }
817
818 itemCurrentSelection = new JMenuItem("Current Selections...");
819 itemCurrentSelection.setMnemonic(KeyEvent.VK_C);
820 itemCurrentSelection.addActionListener(new ActionListener() {
821 public void actionPerformed(ActionEvent e) {
822 Scene.getFilter().load();
823 }
824 });
825
826 itemAutoSelection = new JMenuItem("Make Selection with RegExp");
827 itemAutoSelection.setMnemonic(KeyEvent.VK_A);
828 itemAutoSelection.addActionListener(new ActionListener() {
829 public void actionPerformed(ActionEvent e) {
830 Scene.getFilter().selectWithRegExp();
831 }
832 });
833
834 menuSelection.add(itemCurrentSelection);
835 menuSelection.add(itemAutoSelection);
836 }
837
838 public String getSelectionOptions() {
839 String retString = "";
840 MenuElement[] subItems = null;
841
842 try {
843 subItems = menuSelection.getSubElements()[0].getSubElements();
844 } catch (ArrayIndexOutOfBoundsException e) {
845 menuSelection.removeAll();
846 createSelectionMenuItem();
847 subItems = menuSelection.getSubElements()[0].getSubElements();
848 }
849
850 for (int i=0; i<subItems.length - 2; i++) {
851 String menuText = ((JCheckBoxMenuItem)subItems[i]).getText();
852 if (((JCheckBoxMenuItem)(subItems[i])).isSelected()) {
853 if (menuText.indexOf("Entit") != -1)
854 menuText = menuText + " inside box";
855 retString = retString + "-" + menuText + "\n";
856 }
857 }
858
859 return retString.length() == 0 ? "Occurred Entities\n" : retString;
860 }
861
862 public void updateDatasourceCombo() {
863 int dsourceId = tblComboDataSource.getSelectedIndex();
864
865 tblComboDataSource.removeAllItems();
866 ArrayList dmList = Scene.getDataSourceManager().getDataManagerList();
867 for (int i=0; i<dmList.size(); i++) {
868 tblComboDataSource.addItem(((DataManager)dmList.get(i)).getDatasourceName());
869 }
870 tblComboDataSource.setSelectedIndex(dsourceId);
871 refreshToolBar();
872 }
873
874 public void enableSelectionMenu() {
875 menuSelection.setEnabled(true);
876 createSelectionMenuItem();
877 }
878
879 public void selectDataSource(int dataSourceId) {
880 tblComboDataSource.setSelectedIndex(dataSourceId);
881 }
882
883 public void updateToolbarButtons() {
884 boolean hasViz = windowList.size() > 0;
885
886 tblVizNow.setEnabled(hasViz);
887 tblConfigure.setEnabled(hasViz);
888 }
889
890 public void refreshToolBar() {
891 int toolbarWidth = 0;
892
893 toolbarPhaseDetector.refresh();
894 for (int i=0; i<toolbar.getComponents().length; i++) {
895 if (!toolbar.getComponent(i).isVisible()) continue;
896 double width = toolbar.getComponent(i).getPreferredSize().getWidth();
897
898 if (width < toolbar.getComponent(i).getWidth())
899 width = toolbar.getComponent(i).getWidth();
900
901 toolbarWidth += width;
902 }
903 if (toolbarWidth>=Toolkit.getDefaultToolkit().getScreenSize().width-4) {
904 toolbar.setBounds(0,0,frame.getWidth(),60);
905 toolbar.setPreferredSize(new Dimension(frame.getWidth(),60));
906 } else {
907 toolbar.setPreferredSize(new Dimension(frame.getWidth(),30));
908 toolbar.setBounds(0,0,frame.getWidth(),30);
909 }
910 toolbar.revalidate();
911 desktop.revalidate();
912
913 }
914
915 public void enablePhaseDetectorButton(boolean flag) {
916 toolbarPhaseDetector.enableButton(flag);
917 toolbarPhaseDetector.updateVisualization(false);
918 }
919
920 public void updateFunctionControl(boolean flag) {
921 menuVisualization.setEnabled(flag);
922 menuSelection.setEnabled(flag);
923 tblVizNow.setEnabled(flag);
924 tblConfigure.setEnabled(flag);
925
926 menuFile.setEnabled(flag);
927 menuSelection.setEnabled(flag);
928 menuTool.setEnabled(flag);
929
930 for (int i=0; i<toolbar.getComponents().length; i++) {
931 toolbar.getComponent(i).setEnabled(flag);
932 }
933 toolbarPhaseDetector.enableButton(flag);
934 }
935
936 public PhaseDetectorToolBar getPhaseDetectorToolBar() {
937 return toolbarPhaseDetector;
938 }
939 }